[小ネタ] ElasticBeanstalkのアプリケーション環境変数をCSVで出力
こむろ@大体EB職人です。
やりたいこと
ElasticBeanstalkのアプリケーション環境変数って結構数があるといちいち取得するのは面倒です。ドキュメントに設定値を記載したい場合等、いちいちコンソールから取り出すのが面倒なので、とりあえずAWSコマンドでCSVとして環境変数を取得するためのコマンドを確認しました(単純なAWS CLIコマンドとjq)
前提
- aws-cli/1.16.53 Python/3.6.1 Darwin/17.7.0 botocore/1.12.43
- jq-1.5
コマンド
$ aws elasticbeanstalk describe-configuration-settings \ --profile \ --application-name \ --environment-name | \ jq -r '.ConfigurationSettings[0].OptionSettings | map(select(.Namespace == "aws:elasticbeanstalk:application:environment")) | .[] | [.OptionName, .Value] | @csv'
これを実行すると以下のようなCSVが出力されます。
"XXXXX_EVENT_TOPIC_ARN","arn:aws:sns:ap-northeast-1:xxxxxxx:hogehogeTopic" "XXXXX_ASSETS_BUCKET_NAME","hogehoge-assetsbucket" "XXXXX_REDIS_CACHE_CLUSTER_ID","hogehoge-cluster" "CFN_STACK_NAME","dev-hogehoge" "ELASTIC_BEANSTALK_ENV","true" "LOG_BUCKET_NAME","dev-hogehoge-logbucket"
環境変数のリストが簡単に取得できました。
コマンド要素
必要な箇所を抜粋して解説します。
describe-configuration-settings
AWS CLI Command Reference - aws elasticbeanstalk#describe-configuration-settings
EBの環境設定のパラメータを引っ張ってきます。以下のようなResponseが取得できます。
{ "ConfigurationSettings": [ { "SolutionStackName": "64bit Amazon Linux 2018.03 v2.12.4 running Docker 18.06.1-ce", "PlatformArn": "arn:aws:elasticbeanstalk:ap-northeast-1::platform/Docker running on 64bit Amazon Linux/2.12.4", "ApplicationName": "", "EnvironmentName": "", "DeploymentStatus": "deployed", "DateCreated": "2018-11-13T05:25:16Z", "DateUpdated": "2018-11-16T03:01:03Z", "OptionSettings": [ { "ResourceName": "AWSEBAutoScalingGroup", "Namespace": "aws:autoscaling:asg", "OptionName": "Availability Zones", "Value": "Any" }, { "ResourceName": "AWSEBAutoScalingGroup", "Namespace": "aws:autoscaling:asg", "OptionName": "Cooldown", "Value": "360" }, ..... } ] }
環境変数等の設定は OptionSettings
以下に記載されています。
jq -r
ダブルクォーテーションが残ると鬱陶しいので -r
で消しておきます。
.ConfigurationSettings[0].OptionSettings
ConfigurationSettings
は配列ですが要素は一つだけなのでIndex 0を直値で取得します(まあ、Iterationしても良い気がしますけど)。その中の OptionSettings
の配列を取得します。
map(select(.Namespace == "aws:elasticbeanstalk:application:environment"))
Namespace
の名称が aws:elasticbeanstalk:application:environment
となっているパラメータのみ取り出して配列を再構成します。
[ { "Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "XXXXX_EVENT_TOPIC_ARN", "Value": "arn:aws:sns:ap-northeast-1:xxxxxxx:hogehogeTopic" }, { "Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "XXXXX_ASSETS_BUCKET_NAME", "Value": "hogehoge-assetsbucket" }, { "Namespace": "aws:elasticbeanstalk:application:environment", "OptionName": "XXXXX_REDIS_CACHE_CLUSTER_ID", "Value": "hogehoge-cluster" }, ... ]
.[] | [.OptionName, .Value] | @csv
配列の中身を取り出してIteration。1つ目の要素をOptionName
, 2つ目の要素をValue
のTupleとしてCSVを再構成します。
"XXXXX_EVENT_TOPIC_ARN","arn:aws:sns:ap-northeast-1:xxxxxxx:hogehogeTopic" "XXXXX_ASSETS_BUCKET_NAME","hogehoge-assetsbucket" "XXXXX_REDIS_CACHE_CLUSTER_ID","hogehoge-cluster" "CFN_STACK_NAME","dev-hogehoge" "ELASTIC_BEANSTALK_ENV","true" "LOG_BUCKET_NAME","dev-hogehoge-logbucket" ...
これでEBのアプリケーション環境変数のパラメータリストを取得できました。
それEBコマンドでできるよ
ElasticBeanstalkの場合、ebコマンドを利用することもあります。ebコマンドの場合は printenv
で簡単に環境変数のダンプを取れるようです。
こっちのほうがお手軽そうなのですが、ebコマンドは事前にinitしてないといけなかったりと、それなりに準備が必要になります。基本的にebコマンドでやりよりもaws CLIでやったほうがやれることが多いような気がしているので自分はあまり利用していません。
まとめ
EBのアプリケーション設定値が結構膨大だったのでCLIで一気に取得するようにしました。
EBの設定値周りは結構複雑で数も多いため、コンソールで確認するよりCLIで確認した方が良さそうです。さらに結構パラメータが多いのでjqを使って適度にフィルタリングしてうまく確認しましょう。
ではまた。